package com.cskaoyan.javase.array._0introduction;
/**
 * 案例：
 *
 * 假设A班有80位同学，现在要计算A班全体学生的平均成绩，如何计算呢？
 * 难道要在代码中定义80个变量，然后加起来求平均数？
 *
 * 很明显：
 * 如果程序需要多少数据，就定义多少个变量，过于麻烦了，这种代码写出来也不美观。
 * 更重要的是多个变量直接单独定义，多个变量之间没有任何关联，很不方便管理和维护。
 *      对于程序而言,可扩展性和可维护性是非常重要的,尤其是对于大型企业级应用来说,业务场景复杂,业务需求多变,如果程序的可扩展性和可维护性差,那么这个程序几乎是不可用的.
 *
 * 所以这些数据需要一个“容器”来存放它们，就像去超市购物用一个袋子把所有东西一起带回家一样。
 *
 * Java中用于存放数据的“容器”有很多，但最基本的容器是数组（Array）。定义一个数组容器，就可以存储很多数据。
 *
 * 思考：数组中的数据是胡乱的摆放在一起吗？数组对装在里面的数据有什么要求吗？
 * 首先来看一下数组的定义：
 *      数组是存储多个，具有相同数据类型的数据元素的有序容器（集合）。
 *
 * 在这个定义中就回答了上述问题：
 *      1.数组能够存储多个元素，多个数据，数组是一个容器。
 *      2.数组容器中存储的元素必须数据类型一致。
 *      3.数组容器中存储的元素是有序的：
 *          数组中的每个存储单元，都有唯一编号(下标)，该编号，从左向右，从0开始编号，最大值是数组长度-1
 *          这种编号，专业的术语称之为下标或者索引（index）
 *
 * 除此之外，还有以下一些需要注意的地方：
 *      1.定义数组，本身也是定义一种变量。但显然数组不是基本数据类型，而是引用数据类型。数组是典型的引用数据类型！所以,我们通过学习数组,更重要的是了解何为引用数据类型,这是数组学习中的重点.
 *      2.数组做为一种容器，可以存储基本数据类型元素，也可以存储引用数据类型元素。但同一种数组只能存储同一种数据类型的元素。数组中存储的元素数据类型，决定了数组的类型。比如int类型数组就存储int类型元素。String数组就只能装String类型元素.
 *
 * 数组的优点是:
 *      随机访问,快,效率高
 *
 * 数组的缺点:
 *      数组为了通过寻址公式能够计算出对应下标存储单元的地址,从而实现随机访问
 *      要求:
 *           1.数组存储空间必须连续
 *           2.数组必须只能存储同种数据类型元素
 *
 * 数组的存储空间必须连续 --> 数组对存储空间的要求非常严格
 * -->
 * 数组在内存中一旦被创建,除非销毁它,否则它的长度就再也不会发生改变了(这是数组最大的缺点)
 * --> 所以数组虽然有随机访问这个大的优点,但是由于长度的限制,实际开发中使用的频率并不高
 * --> 因为数组的初始长度实在难以把握,长了浪费空间,短了不够用
 *
 * 扩展:
 * 当然,虽然数组不会被直接使用,但是数组作为基础容器,在开发中是随处可见的
 * 比如集合当中的ArrayList就是一个可自动扩容的数组,它有下标,有随机访问.
 * ArrayList是如何实现自动扩容呢?难道它突破了数组的限制?
 * 当数组不够用了,就将原数组废弃,换一个更大的数组,然后将老数组的元素全部复制过去就可以了.
 *
 * 为什么数组的下标非要从0开始呢? IEEE754标准下 移码 补码
 * 寻址公式的问题
 *
 *  @since 11:04
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {

    }
}
